package com.queryBuilder.test;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.apache.commons.collections.map.HashedMap;

public class QueryBuilderUtil {
	private static Map<String, Set<String>> resultMap;

	/**
	 * 加载配置文件的类，返回一个Map类型的数据，存储解析到的数据
	 * 
	 * @return
	 */
	public static Map<String, Set<String>> getProperVal() {
		FileInputStream fis = null;
		InputStreamReader isr = null;
		BufferedReader br = null; // 用于包装InputStreamReader,提高处理性能。因为BufferedReader有缓冲的，而InputStreamReader没有。
		try {
			String str = "";
			fis = new FileInputStream("src/classTemplate.properties");// FileInputStream
			// 从文件系统中的某个文件中获取字节
			isr = new InputStreamReader(fis);// InputStreamReader 是字节流通向字符流的桥梁,
			br = new BufferedReader(isr);// 从字符输入流中读取文件中的内容,封装了一个new
			while ((str = br.readLine()) != null) {
				if (str.trim().length() > 0) {
					String string[] = str.split("\\s+");
					try {
						getResultMap(string[0], string[1]);
					} catch (Exception e1) {
						System.out
								.println("src下classTemplate.properties文件读取失败，请检查文件格式是否正确！");
					}
				}
			}
		} catch (FileNotFoundException e) {
			System.out.println("在src下没有找到classTemplate.properties文件，请确认此文件存在！");
		} catch (IOException e) {
			System.out
					.println("src下classTemplate.properties文件读取失败，请检查文件格式是否正确！");
		} finally {
			try {
				br.close();
				isr.close();
				fis.close();
				// 关闭的时候最好按照先后顺序关闭最后开的先关闭所以先关s,再关n,最后关m
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return resultMap;
	}

	/**
	 * 填充resultMap
	 * 
	 * @param classPath
	 *            实体类的路径
	 * @param templateName
	 *            模块名称
	 */
	protected static void getResultMap(String classPath, String templateName) {
		if (resultMap != null) {
			Iterator<String> iterator = resultMap.keySet().iterator();
			boolean flag = false;
			while (iterator.hasNext()) {
				String templateNam = iterator.next();
				if (templateNam.trim().equals(templateName)) {
					flag = true;
					Set<String> set = resultMap.get(templateNam);
					set.add(classPath);
				}
			}
			if (false == flag) {
				Set<String> set = new HashSet<String>();
				set.add(classPath);
				resultMap.put(templateName, set);
			}
		} else {
			resultMap = new HashMap<String, Set<String>>();
			Set<String> set = new HashSet<String>();
			set.add(classPath);
			resultMap.put(templateName, set);
		}
	}

}
